/* 
 * File:   SerializarRepositorioTest.cpp
 * Author: nahuel
 *
 * Created on Jun 9, 2013, 10:24:32 PM
 */

#include <stdlib.h>
#include <iostream>
#include "common_Repositorio.h"

/*
 * Simple C++ Test Suite
 */

using namespace TP::Archivos;

void testSerializar() {
    std::string repoPath = "/home/someuser/au";
    int version = 123;
    
    RepoItem* repoItem1 = new RepoItem();
    RepoItem* repoItem2 = new RepoItem();
    
    std::string filePath1 = "/home/someuser/au", filePath2 = "/home/otheruser/au";
    std::string fileName1 = "file.txt", fileName2 = "otherfile.txt";
    int version1 = 123, version2 = 1;    
    std::string hash11 = "hash1", hash21 = "somehash";
    std::string hash12 = "hash2", hash22 = "yetanotherhash";
    std::string hash13 = "hash3", hash23 = "lasthash";
    
    repoItem1->SetFilePath(filePath1);
    repoItem1->SetFilename(fileName1);
    repoItem1->SetVersion(version1);    
    repoItem1->AddHash(hash11);
    repoItem1->AddHash(hash12);
    repoItem1->AddHash(hash13);
    
    repoItem2->SetFilePath(filePath2);
    repoItem2->SetFilename(fileName2);
    repoItem2->SetVersion(version2);    
    repoItem2->AddHash(hash21);
    repoItem2->AddHash(hash22);
    repoItem2->AddHash(hash23);
    
    
    TP::Archivos::Repositorio repositorio(repoPath);
    repositorio.SetVersion(version);
    repositorio.AgregarRepoItem(repoItem1);
    repositorio.AgregarRepoItem(repoItem2);    
    
    string result = repositorio.Serializar();
    std::cout << result << std::endl;
    
    TP::Archivos::Repositorio* repoParseado = TP::Archivos::Repositorio::Parse(result);
          
    if (
            ( repoParseado->GetPath() != repoPath    )  ||
            ( repoParseado->GetVersion() != version  )  ||
            (!repoParseado->ExisteRepoItem(fileName1))  ||
            (!repoParseado->ExisteRepoItem(fileName2))
       ) {
        std::cout << "%TEST_FAILED% time=0 testname=testSerializar (SerializarRepositorioTest) message=error message sample" << std::endl;
    }
}

int main(int argc, char** argv) {
    std::cout << "%SUITE_STARTING% SerializarRepositorioTest" << std::endl;
    std::cout << "%SUITE_STARTED%" << std::endl;

    std::cout << "%TEST_STARTED% testSerializar (SerializarRepositorioTest)" << std::endl;
    testSerializar();
    std::cout << "%TEST_FINISHED% time=0 testSerializar (SerializarRepositorioTest)" << std::endl;

    std::cout << "%SUITE_FINISHED% time=0" << std::endl;

    return (EXIT_SUCCESS);
}

